package com.jsbs.iam.auth.service;

import com.github.pagehelper.PageInfo;
import com.jsbs.iam.auth.dto.*;
import com.jsbs.iam.auth.param.IamApplyDetaislParam;
import com.jsbs.iam.auth.param.IamRoleQueryUserParam;
import com.jsbs.iam.auth.param.IamRoleRemoveUserParam;
import com.jsbs.iam.auth.vo.IamUserInfoVo;
import com.jsbs.iam.common.core.dto.Result;

import java.util.List;
import java.util.Set;

/**
 * @ClassName: IamRoleManagerService
 * @Author: tenghuawei
 * @Date: 2022/12/26 13:41
 * @Description:
 */

public interface IamRoleManagerService {

    /**
     * 功能描述：根据角色编码和角色名称，模糊查询角色列表
     * @param iamRoleCreateDto
     * @return PageInfo
     */
    PageInfo queryIamRole(IamRoleCreateDto iamRoleCreateDto);

    /**
     * 功能描述：角色新建
     * @param iamRoleCreateDto
     * @return int
     */
    int roleCreate(IamRoleCreateDto iamRoleCreateDto);

    /**
     * 功能描述：角色编辑
     * @param iamRoleCreateDto
     * @return int
     */
    int roleEdit(IamRoleCreateDto iamRoleCreateDto);

    /**
     * 功能描述：角色删除
     * @param iamRoleDeleteDto
     * @return boolean
     */
    Result roleDelete(IamRoleDeleteDto iamRoleDeleteDto);

    /**
     * 功能描述：角色启用或禁用
     * @param iamRoleUpdateStatusDto
     * @return Result
     */
    Result updateRoleStatus(IamRoleUpdateStatusDto iamRoleUpdateStatusDto);

    /**
     * 功能描述：角色关联用户查询——可根据用户编码和姓名，模糊查询某个角色下所有已绑定的用户
     * @param
     * @return
     */
    PageInfo<IamUserInfoVo> queryRoleBindUsers(IamRoleQueryUserParam iamRoleQueryUserParam);

    /**
     * 功能描述：角色移除用户
     * @param
     * @return
     */
    int roleRemoveUsers(IamRoleRemoveUserParam iamRoleRemoveUserParam);

    /**
     * 功能描述：查询该角色下还未绑定的用户（分页展示）
     * @param
     * @return
     */
    PageInfo<IamUserInfoVo> queryRoleNotBindUsers(IamRoleQueryUserParam iamRoleQueryUserParam);

    /**
     * 功能描述：角色绑定用户
     * @param
     * @return
     */
    int roleBindUsers(IamRoleBindUserDto iamRoleBindUserDt);

    /**
     * 功能描述：角色按组织绑定用户
     * @param iamRoleBindUserByOrgDto
     * @return
     */
    void roleBindUsersByOrg(IamRoleBindUserByOrgDto iamRoleBindUserByOrgDto);

    /**
     * 功能描述：获取某个角色下某个组织树下已经勾选的组织或岗位，回填
     * @param iamOrgInfoAlreadySelectDto
     * @return List
     */
    List<String> getAlreadyOrgThreeInfo(IamOrgInfoAlreadySelectDto iamOrgInfoAlreadySelectDto);

    /**
     * 功能描述：角色授权应用系统
     * @param iamRoleAuthorizedApplicationDto
     * @return
     */
    void roleAuthorizedApplication(IamRoleAuthorizedApplicationDto iamRoleAuthorizedApplicationDto);

    /**
     * 功能描述：角色授权应用系统勾选的菜单或按钮，回填
     * @param iamMenuManagerAlreadySelectDto
     * @return List
     */
    Set<String> getAlreadyMenuThreeInfo(IamMenuManagerAlreadySelectDto iamMenuManagerAlreadySelectDto);

    /**
     * 功能描述：查看一个用户(账户)的应用详情
     * @param iamApplyDetaislParam
     * @return Result
     */
    Result getApplicationDetails(IamApplyDetaislParam iamApplyDetaislParam);

    /**
     * 功能描述：查询管理员应用权限列表
     * param：roleCode
     * param：companyCode
     * @return Result
     */
    Result queryAdminRole(String roleCode,String companyCode) ;

}
